package com.cainiao.dao;

import com.cainiao.bean.EmpStatus;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.TypeHandler;

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * 1.
 *
 * @author shkstart
 * @create 2021-04-26 18:43
 */
public class MyEnumStatusTypeHandler implements TypeHandler<EmpStatus> {
    /**
     * 定义当前数据如何保存到数据库中
     *
     * @param ps        预编译处理语句
     * @param i
     * @param empStatus
     * @param jdbcType
     * @throws SQLException
     */
    @Override
    public void setParameter(PreparedStatement ps, int i, EmpStatus empStatus, JdbcType jdbcType) throws SQLException {
        System.out.println("要保存的状态码 = " + empStatus.getCode());
        ps.setString(i, empStatus.getCode().toString());
    }

    /**
     * 结果集的获取方法
     *
     * @param resultSet
     * @param s
     * @return
     * @throws SQLException
     */
    @Override
    public EmpStatus getResult(ResultSet resultSet, String s) throws SQLException {
        //需要根据从数据库中拿到的枚举的状态码返回一个枚举对象
        int setInt = resultSet.getInt(s);
        System.out.println("setInt,从数据库中获取的状态码 = " + setInt);
        return EmpStatus.getEmpsStatusByCode(setInt);
    }

    /**
     * 结果集的获取方法
     *
     * @param resultSet
     * @param i
     * @return
     * @throws SQLException
     */
    @Override
    public EmpStatus getResult(ResultSet resultSet, int i) throws SQLException {
        int setInt = resultSet.getInt(i);
        System.out.println("setInt,从数据库中获取的状态码 = " + setInt);
        return EmpStatus.getEmpsStatusByCode(setInt);
    }

    /**
     * 存储过程的获取方法
     *
     * @param cs
     * @param i
     * @return
     * @throws SQLException
     */
    @Override
    public EmpStatus getResult(CallableStatement cs, int i) throws SQLException {
        int setInt = cs.getInt(i);
        System.out.println("setInt,从数据库中获取的状态码 = " + setInt);
        return EmpStatus.getEmpsStatusByCode(setInt);
    }
}
